// const hellow = (name: string) => {
//     console.log(`hello, ${name}`)
// }
//
// hellow('TypeScript')


export {}


//枚举
// //不设值，从0开始递增；第一个设值，后面逐个累加
// enum PostStatus {
//     Draft,
//     Unpublished = 1,
//     published = 2
// }
//
// const post = {
//     title: 'sadasdasd',
//     concent: 'sadasdaswdsadsadasd',
//     status: PostStatus.Draft
// }
//
// //不建议使用const这种常量枚举，即在enum前面加const

// //函数类型
// function func1(a:number, b:number = 10):string {
//     return 'func1'
// }
//
// //函数表达式
// const func2 = function (a:number, b:number):string {
//     return 'fun2'
// }

// value: any  不会有类型检查，不安全，建议不要用

// // 类型断言
// const nums = [ 110, 120, 119, 168 ]
// const res = nums.find(i => i > 0)  //有报错
// // const square = res*res
//
// const num1 = res as number  //编译后不会存在

// 接口  interface
// 接口就是用来约束对象的结构，
// 一个对象要实现这个接口就必须要拥有这个接口所约束的所有成员

// interface Post {
//     title: string
//     content: string
//     subtitle?:string //可选
//     readonly summary:string //只读
// }
//
// function printPost(post: Post) {
//     console.log(post.title)
//     console.log(post.content)
// }
//
// // printPost({
// //     title: 'sadasdsad',
// //     content: 'ddddddd'
// // })
//
// // *ts中接口只是为有结构的数据进行类型约束的，不会显示在编译后的代码中
//
// //接口 动态成员
//
// interface Cache {
//     [prop: string]: string
// }
//
// const cache: Cache = {}
// cache.foo = 'value1'
// cache.bar = 'value2'


//类 (class)

class Person {
    public name: string // = 'init name'  //不用特意加，默认就是public
    private age: number //私有属性，只能在类内使用
    protected gender: boolean //子类可访问
    //定义的属性一定在构造函数中赋值
    //构造函数
    constructor(name: string, age: number) {
        this.age = age
        this.name = name
        this.gender = true
    }
}

class Student extends Person{
    constructor(name:string, age: number) {
        super(name, age);  //调用父类的构造函数
        console.log(this.gender)
    }
}

const tom = new Person('tom', 18)
console.log(tom.name)

